In computing, booting up is the initial set of operations that a computer system performs when electrical power to the central processing unit (“CPU”) is switched on. The process begins when a computer is turned on for the first time or is re-energized after being turned off, and ends when the computer is ready to perform its normal operations. The boot procedures can include performing diagnostic tests (such as the power-on self-test), locating and initializing peripheral devices, and then finding, loading and starting an operating system (“OS”).
The first stage of the boot process is a program that is executed in-place at the address that the system processor is mapped to at start up. This address is known as the reset vector. The boot code contained in the program sets up the system memory. The boot code depends on the components used on the individual boards and cannot be generalized enough so that the proper sequence could be embedded into the processor hardware. The boot code then loads the second stage boot loader or the OS kernel into the system memory.
Typically, for a system processor to execute the program in-place in the memory, the memory must be connected to the system processor via a parallel bus which allows execution in-place. Today's embedded products are real-estate sensitive however, and any parallel interface connected to the system processor greatly increases the amount of space dedicated to wiring. At the same time, embedded systems need to be able to boot from external devices that connect over a serial peripheral interface (“SPI”). Since serial interface devices do not have in-place execution capability, the system processor's reset vector cannot be mapped to the location in the external device's memory.
The above-described description is merely intended to provide a contextual overview of current techniques for booting embedded systems and is not intended to be exhaustive.